package parser

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"runtime"
)

type Parser struct{}

func NewParser() *Parser {
	return &Parser{}
}

func (p *Parser) ParseLog(filePath, stackFile string) (string, error) {
	// 检查文件是否存在
	if _, err := os.Stat(filePath); os.IsNotExist(err) {
		return "", fmt.Errorf("文件不存在: %s", filePath)
	}
	if _, err := os.Stat(stackFile); os.IsNotExist(err) {
		return "", fmt.Errorf("堆栈文件不存在: %s", stackFile)
	}

	// 根据操作系统选择retrace工具
	var retraceCmd string
	if runtime.GOOS == "windows" {
		retraceCmd = "retrace.bat"
	} else {
		retraceCmd = "retrace"
	}

	// 构建命令
	cmd := exec.Command(retraceCmd, filePath, stackFile)
	
	// 设置工作目录为文件所在目录
	cmd.Dir = filepath.Dir(filePath)
	
	// 执行命令并捕获输出
	output, err := cmd.CombinedOutput()
	if err != nil {
		return "", fmt.Errorf("执行retrace命令失败: %v, 输出: %s", err, string(output))
	}

	return string(output), nil
}
